package com.briup.corejava.day06;

import java.util.Arrays;

/**
 * 二维数组的应用
 */
public class Test2 {

    /**
     * 使用方法来定义一个二维数组的求和，加入可变长参数
     * @param msg 无意义的字符串，主要是观察可变长参数的位置
     * @param arr 可变长参数 ，指代一个二维数组
     * @return 二维数组每个元素的累加和
     */
    public static int sum(String msg,int[]... arr){
        int sum = 0;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                sum+=arr[i][j];
            }
        }
        return sum;
    }

    /**
     * 杨辉三角
     * @param line 输出的行数
     */
    public static void yhTriangle(int line){
        // 定义一个二维数组
        // 赋值
        int[][] arr = new int[line][line];
        // 普通思路 （每一行的数组长度和行数相同），因为要加上一行，上一行会少一列
//        for(int i=0;i<arr.length;i++){
//            int[] a1 = new int[i];
//            arr[i] = a1;
//        }
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                // 1、第一列的所有值为1  ||  2、行列相等的值为1
                if(j == 0 || i == j)
                    arr[i][j] = 1;
                // 3、其余位置需要相加得到 [i][j] = [i-1][j]+[i-1][j-1]
                else if(i>=2)
                    arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
            }
        }
        // 遍历 类似于99乘法表
        for(int i=0;i<arr.length;i++){
            // 计算空格数量
            for(int j=0;j<arr.length-i-1;j++){
                System.out.print(" ");
            }
            for(int j=0;j<=i;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }

    }


    public static void main(String[] args) {
        // 二维数组的声明和赋值
        int[][] arr1 = new int[2][3];
        int[][] arr2 = new int[3][];
        int[][] arr3 = new int[][]{{1,3,5},{2,4,6}};
        int[][] arr4 = {
                        {2,3},
                        {1,6},
                        {4,5}
                        };
        // 赋值和取值
        arr1[0][0] = 100;
        // 一维数组的静态初始化只能在声明的时候同时赋值，没有其他形式
        arr1[1] = new int[]{2, 2, 2};
        System.out.println(arr4[2]);
        System.out.println(arr4[2][0]);
        System.out.println(Arrays.deepToString(arr1));
        // 遍历（循环嵌套）
        for(int i = 0;i<arr1.length;i++){
            for(int j = 0;j<arr1[i].length;j++){
                if(j == arr1[i].length-1)
                    System.out.print(arr1[i][j]);
                else
                    System.out.print(arr1[i][j]+", ");
            }
            System.out.println();
        }

        // 二维数组的求和
        int[] a1 = {1,1,1};
        int[] a2 = {4,7,6};
        // 可变长参数的实参，多个参数用逗号隔开
        int as = sum("随便写", new int[]{1, 2, 3}, a1, a2);
        System.out.println("as = " + as);

        // 杨辉三角
        yhTriangle(10);
    }
}
